package org.swim.sessions;

import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.swim.entity.*;


@Stateless
public class GestoreRicerca implements GestoreRicercaRemote{
	
	public GestoreRicerca(){
		
	}
	@PersistenceContext(unitName = "JPADB")
    private EntityManager ur;
	
	public List<Utente> ricerca(String idUtente, Boolean amicizia, String abilita, Hashtable<String,String> parametri){
		String vincolo=" WHERE u.email <> '"+ idUtente +"'";
		String query = " SELECT u.* FROM utente u "; 
		if(abilita!=null){
			vincolo += " AND ";
			query += " , utente_abilita ua ";
			vincolo += " u.email = ua.emailUtente AND ";
			vincolo += " ua.abilita =  '" + abilita + "' AND";
			vincolo += " u.email NOT IN "		
						+" (SELECT r.emailDest FROM richiesta_aiuto r "
						+" WHERE r.abilita = '"+ abilita +"' AND "
						+" r.status = 0)";
		}	
		if(amicizia){
			vincolo += " AND ";
			query += " , amicizia a ";
			vincolo += " ( a.emailMit = '" + idUtente + "' AND a.emailDest = u.email ) "+
					" OR  ( a.emailDest = '" + idUtente + "' AND a.emailMit = u.email ) AND a.status = 2 ";
		}
		
		for(String key: parametri.keySet()){
	    	vincolo += " AND ";
	    	vincolo += " u." + key + " = '" + parametri.get(key) + "' ";
		}
		query = query  + vincolo;
		List<Utente> u =  ur.createNativeQuery(query,Utente.class).getResultList();
		return u;
	}

	@Override
	public List<Utente> ricercaSemplice(String abilita) {
		
		String query = "SELECT u.* FROM utente u, utente_abilita ua "
						+" WHERE u.email = ua.emailUtente AND ua.abilita = '"+ abilita +"'";
		List<Utente> lu =  ur.createNativeQuery(query,Utente.class).getResultList();
		return lu;
	}

}